import resolve from 'rollup-plugin-node-resolve'
import commonjs from 'rollup-plugin-commonjs' //rollup默认是不支持CommonJS模块的
import typescript from 'rollup-plugin-typescript'
import babel from 'rollup-plugin-babel' //转换es6语法
import postcss from 'rollup-plugin-postcss' //css/scss/less
import autoprefixer from 'autoprefixer' //属性加前缀
import cssnano from 'cssnano' //css压缩
import { terser } from 'rollup-plugin-terser' //代码压缩
import serve from 'rollup-plugin-serve' //启服务
import livereload from 'rollup-plugin-livereload' //文件变化时，实时刷新页面
import del from 'rollup-plugin-delete'  //打包前删除
import pkg from './package.json';

export default commandLineArgs => {
  return {
    input: 'src/index.ts', // 打包入口
    output: [ // 打包出口
      {
        file: 'dist/index.umd.js', // 最终打包出来的文件路径和文件名，这里是在package.json的browser: 'dist/index.js'字段中配置的
        format: 'umd', // umd是兼容amd/cjs/iife的通用打包格式，适合浏览器
        name: '$$rollupTest', //umd需指定name 入口文件有export
        sourcemap: true, //生成sourcemap
        globals: { 'lodash-es': '_' }
      },
      {
        file: `dist/${pkg.version}/index.umd.min.js`,
        format: 'umd',
        name: '$$rollupTest',
        sourcemap: true, //生成sourcemap
        plugins: [terser()],
        globals: { 'lodash-es': '_' }
      },
      {
        file: 'dist/cjs/index.cjs.js',
        format: 'cjs',
        name: '$$rollupTest',
        sourcemap: true
      },
      {
        file: 'dist/esm/index.esm.js',
        format: 'esm',
        name: '$$rollupTest',
        sourcemap: true
      },
    ],
    plugins: [ // 打包插件
      resolve(), // 查找和打包node_modules中的第三方模块
      commonjs(), // 将 CommonJS 转换成 ES2015 模块供 Rollup 处理
      typescript(), // 解析TypeScript
      babel({
        exclude: 'node_modules/**',
        runtimeHelpers: true
      }),
      postcss({
        plugins: [
          autoprefixer(), //属性加前缀
          cssnano() //css压缩
        ],
        // extract: 'css/index.css' //css抽离成单独的文件
      }),
      // terser(), //代码压缩，生产环境可配
      !commandLineArgs && del({
        targets: 'dist/*',
      }),
      serve({
        contentBase: '',  //服务器启动的文件夹，默认是项目根目录，需要在该文件下创建index.html
        port: 8020   //端口号，默认10001
      }),
      livereload('dist')   //watch dist目录，当目录中的文件发生变化时，刷新页面
    ],
    external: Object.keys(pkg.dependencies), //排除
  }
};